package com.dms.modules.product.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dms.modules.product.entity.Product;
import com.dms.modules.product.entity.ProductCategory;

import java.util.List;

/**
 * 商品分类服务接口
 */
public interface ProductCategoryService extends IService<ProductCategory> {
    
    /**
     * 获取分类树结构
     */
    List<ProductCategory> getCategoryTree();
    
    /**
     * 分页获取分类列表
     */
    Page<ProductCategory> pageCategories(Integer pageNum, Integer pageSize, String name);
    
    /**
     * 检查分类下是否有商品
     */
    boolean hasProducts(Long categoryId);
    
    /**
     * 更新分类显示状态
     */
    void updateVisible(Long categoryId, Integer visible);
    
    /**
     * 获取指定维度的分类
     */
    List<ProductCategory> getCategoriesByDimension(String dimension);
    
    /**
     * 获取分类列表
     */
    List<ProductCategory> getCategoryList(Long parentId);
    
    /**
     * 获取次元分类
     */
    List<ProductCategory> getDimensionCategories(String dimension);
    
    /**
     * 获取分类商品列表
     */
    IPage<Product> getCategoryProducts(Long categoryId, Integer pageNum, Integer pageSize);
    
    /**
     * 获取多级分类筛选商品列表
     */
    IPage<Product> getFilteredCategoryProducts(List<Long> categoryIds, Integer pageNum, Integer pageSize);
    
    /**
     * 添加分类
     * @param category 分类信息
     * @return 分类ID
     */
    Long addCategory(ProductCategory category);
    
    /**
     * 更新分类
     * @param category 分类信息
     * @return 是否成功
     */
    boolean updateCategory(ProductCategory category);
    
    /**
     * 删除分类
     * @param id 分类ID
     * @return 是否成功
     */
    boolean deleteCategory(Long id);
    
    /**
     * 获取分类详情
     * @param id 分类ID
     * @return 分类信息
     */
    ProductCategory getCategory(Long id);
    
    /**
     * 获取子分类
     * @param parentId 父分类ID
     * @return 子分类列表
     */
    List<ProductCategory> getChildren(Long parentId);
    
    /**
     * 构建分类树
     * @param categories 分类列表
     * @return 分类树
     */
    List<ProductCategory> buildCategoryTree(List<ProductCategory> categories);
} 